package com.tanjie.blackbean.mybatis.support;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

/**
 * @author: tanjie
 * @date: 2022-04-16 15:12
 **/
public final class PageConverter {

    private PageConverter() {
    }

    /**
     * 分页数据，从PO对象转换成VO对象
     *
     * @param pPage    PO分页数据
     * @param function 转换方法
     * @param <P>      PO对象类型
     * @param <V>      VO的对象类型
     * @return VO分页对象
     */
    public static <P, V> IPage<V> convert(IPage<P> pPage, Function<P, V> function) {
        IPage<V> voPage = new Page<>();
        BeanUtil.copyProperties(pPage, voPage);
        List<P> poList = pPage.getRecords();
        if (CollUtil.isEmpty(poList)) {
            return voPage;
        }
        List<V> voList = new ArrayList<>();
        for (P p : poList) {
            if (function != null) {
                voList.add(function.apply(p));
            }
        }
        voPage.setRecords(voList);
        return voPage;
    }

}
